from typing import List


class Solution:
    def maxFreeTime(self, eventTime: int, k: int, startTime: List[int], endTime: List[int]) -> int:
        """
        给你 n+1 个空余时间段，合并其中 k+1 个连续的空余时间段，得到的最大长度是多少？
        """
        def get(i):
            if i==0:
                return startTime[0] # 最左边的空余时间段
            if i==n:
                return eventTime-endTime[-1] # 最右边的空余时间段
            return startTime[i]-endTime[i-1] # 中间的空余时间段，当前段的开始时间减去前一段的结束时间

        n=len(startTime)
        ans=s=0
        for i in range(n+1):
            # 添加空余时间
            s+=get(i)
            if i<k:  # 窗口长度不为k，跳过
                continue
            # 更新答案
            ans=max(ans,s)
            # 移除左边添加的空余时间
            s-=get(i-k)
        return ans